<?php

/**
 * 角色相关
 */

namespace app\admin\controller;

use think\Db;
use think\response\Json;
use app\admin\controller\Tree;

class Role extends BaseController
{
    /**
     * 列表视图
     */
    public function index()
    {
        return view();
    }

    /**
     * 获取列表信息
     */
    public function getList()
    {
        // 获取参数
        $params = input("get.");
        $page = isset($params["page"]) ? $params["page"] : 1;
        $limit = isset($params["limit"]) ? $params["limit"] : 30;
        $offset = ($page - 1) * $limit;
        // 定义查询条件
        $where[] = ["status", "<>", 3];
        // 定义查询字段
        $fields = "id,title,status,create_time";
        // 统计查询数据条数
        $count = db("role")->where($where)->count();
        // 查询数据
        $info = db("role")->where($where)->field($fields)->order("create_time desc")->limit($offset, $limit)->select();
        // 定义返回数据
        $arr = ["code" => 0, "msg" => 'true', "data" => $info, "count" => $count];
        return json($arr);
    }

    /**
     * 添加视图
     */
    public function add()
    {
        // 查询信息
        return view();
    }

    /**
     * 编辑视图
     */
    public function edit()
    {
        // 获取参数
        $params = input("get.");
        $id = isset($params["id"]) ? $params["id"] : '';
        // 定义数据
        $info = [];
        // 验证参数
        if (isset($params["id"])) {
            // 查询数据
            $info = db("role")->where("id", "=", $params["id"])->find();
        }
        $this->assign("info", $info);
        $this->assign("id", $id);
        return view();
    }

    /**
     * 保存信息
     */
    public function save()
    {
        // 获取参数
        $params = input("post.");
        // 验证参数
        if (!empty($params["id"])) {
            // 更新数据
            db("role")->update($params);
        } else {
            // 释放参数ID
            unset($params["id"]);
            $params["create_time"] = date("Y-m-d H:i:s");
            // 保存数据
            db("role")->insert($params);
        }
        // 返回数据
        return json(["code" => 0, "msg" => "操作成功"]);
    }

    /**
     * 权限视图
     */
    public function authority()
    {
        // 获取参数
        $params = input("get.");
        $id = "";
        // 查询数据
        $info = db("role_module")->where("role_id", "=", $params["role_id"])->find();
        // 验证数据
        if ($info) {
            $id = $info["id"];
        }
        $this->assign("id", $id);
        $this->assign("role_id", $params["role_id"]);
        return view();
    }

    /**
     * 权限保存
     */
    public function autyfun()
    {
        // 获取参数
        $params = input("post.");
        // 释放无用数据
        unset($params["layuiTreeCheck"]);
        // 验证参数
        if (isset($params["id"]) && !empty($params["id"])) {
            // 更新数据
            db("role_module")->update($params);
        } else {
            // 保存数据
            db("role_module")->insert($params);
        }
        // 返回数据
        return json(["code" => 0, "msg" => "操作成功"]);
    }

    /**
     * 获取模块信息
     * @return Json
     */
    public function getModuleList()
    {
        // 获取参数
        $params = input("get.");
        // 定义数据
        $module_id = [];
        // 查询角色权限数据
        $role_module = db("role_module")->where("role_id", "=", $params["role_id"])->find();
        // 验证数据
        if ($role_module) {
            $module_id = explode(",", $role_module["module_id"]);
        }
        // 定义查询字段
        $fields = "id,parent_id,title,true as spread,false as checked";
        // 定义查询条件
        $where["status"] = 1;
        $where["show"] = 1;
        // 查询模块信息
        $info = db("module")->where($where)->field($fields)->order("orders asc,create_time desc")->select();
        // 模块信息转换树形结构
        $info = Tree::makeTree($info);
        // 处理已设置模块信息
        $info = self::setModuleCheck($info, $module_id);
        return json($info);
    }

    /**
     * 设置数据选中
     * @param $info
     */
    public static function setModuleCheck($info, $checked)
    {
        for ($i = 0; $i < count($info); $i++) {
            if (in_array($info[$i]["id"], $checked)) {
                if (empty($info[$i]["children"])) {
                    $info[$i]["checked"] = true;
                } else {
                    $two_info = $info[$i]["children"];
                    for ($j = 0; $j < count($two_info); $j++) {
                        if (in_array($two_info[$j]["id"], $checked)) {
                            if (empty($two_info[$j]["children"])) {
                                $info[$i]["children"][$j]["checked"] = true;
                            } else {
                                $three_info = $two_info[$j]["children"];
                                for ($k = 0; $k < count($three_info); $k++) {
                                    if (in_array($three_info[$k]["id"], $checked)) {
                                        if (empty($three_info[$k]["children"])) {
                                            $info[$i]["children"][$j]["children"][$k]["checked"] = true;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        return $info;
    }

    /**
     * 字段保存
     */
    public function inputChange()
    {
        // 获取参数
        $params = input("post.");
        // 验证参数
        if (isset($params['id']) && !empty($params['id'])) {
            // 更新数据
            db("role")->update($params);
            // 定义返回数据
            $arr = ["code" => 0, "msg" => "操作成功"];
        } else {
            // 定义返回数据
            $arr = ["code" => 1, "msg" => "操作失败，缺少参数：id"];
        }
        return json($arr);
    }

    /**
     * 删除数据
     */
    public function delete()
    {
        // 获取参数
        $params = input("post.");
        // 验证参数
        if (isset($params["ids"]) && !empty($params["ids"])) {
            // 定义查询条件
            $where["id"] = array("in", $params["ids"]);
            // 更新数据状态
            db("role")->whereIn('id', $params["ids"])->update(["status" => 3]);
            // 定义返回数据
            $arr = ["code" => 0, "msg" => "删除成功"];
        } else {
            // 定义返回数据
            $arr = ["code" => 1, "msg" => "操作失败，缺少参数"];
        }
        return json($arr);
    }
}
